//给定一个整数，编写一个函数来判断它是否是 2 的幂次方。 
//
// 示例 1: 
//
// 输入: 1
//输出: true
//解释: 20 = 1 
//
// 示例 2: 
//
// 输入: 16
//输出: true
//解释: 24 = 16 
//
// 示例 3: 
//
// 输入: 218
//输出: false 
// Related Topics 位运算 数学 
// 👍 215 👎 0

package leetcode.editor.cn;
//Java：2的幂
public class P231PowerOfTwo{
    public static void main(String[] args) {
        Solution solution = new P231PowerOfTwo().new Solution();
        System.out.println(solution.isPowerOfTwo(100));
        // TO TEST
    }
    //leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public boolean isPowerOfTwo1(int n) {
        /*
        1
        10  -1=1
        100 -1=11
        1000
        10000
        判断这个数减1是否为全1
        * */
        if(n<=0){
            return false;
        }
        int tmp=n-1;
        while(tmp!=0){

            if((tmp&1)==0){
                return false;
            }
            tmp=tmp>>>1;
        }

        return true;
    }
        public boolean isPowerOfTwo(int n) {
            /*
            不同判断n-1是否全部为1 ，直接判断 n&(n-1)是否为0即可
            * */

            if(n<=0){
                return false;
            }
            return (n&(n-1))==0;
        }
}
//leetcode submit region end(Prohibit modification and deletion)

}
